package ObjetoBr;

public enum TipoFicha{

	/**************************************************************************************
	 IDENTIFICADOR
	*************************************************************************************/
	IDENTIFICADOR,
	
	/**************************************************************************************
	 PALAVRAS RESERVADAS 	
	*************************************************************************************/	
	PARE, RETORNE, CRIAR,
	CLASSE, 
	CONSTRUTOR,
	HERDA, IMPLEMENTA, PAI,
	
	// Modificadores de acesso
	PUBLICO, PRIVADO, PROTEGIDO, ESTATICO, FINAL,
	
	// Estruturas de seleção
	SE, SENAO, ESCOLHA,CASO,
	
	// Estruturas de repetição
	PARA, ENQUANTO, FACA,
	
	// Tipos primitivos
	INTEIRO, REAL, LOGICO, TEXTO, CARACTER,
	
	/**************************************************************************************
	 Operadores Aritiméticos.
	*************************************************************************************/
	MAIS, MENOS, VEZES, DIVIDIDO, RESTO, ELEVADO, RAIZ, INCREMENTO, DECREMENTO, // Ok
	MAIS_IGUAL, MENOS_IGUAL, VEZES_IGUAL, DIVIDIDO_IGUAL, // Ok
	
	
	/**************************************************************************************
	 Operadores de Comparação.
	*************************************************************************************/
	ATRIBUICAO, MAIOR_QUE, MENOR_QUE, IGUAL, MENOR_IGUAL, MAIOR_IGUAL, DIFERENTE, // OK
	
	// Operadores Lógicos
	NAO, E, OU, XOU, // OK
	
	// Estruturas de Blocos
	CHAVE_DIREITA, CHAVE_ESQUERDA, // OK
	COCHETE_DIREITO, COCHETE_ESQUERDO, // OK
	PARENTESE_DIREITO, PARENTESE_ESQUERDO, // OK
	
	// Simbolos especiais
	PONTO, PONTO_VIRGULA, TERNARIO, DOIS_PONTOS, // Ok
	
	/**************************************************************************************
	 Operadores de Comparação.
	*************************************************************************************/
	CONSTANTE_INTEIRA, CONSTANTE_TEXTO, CONSTANTE_REAL, // OK
	CONSTANTE_LOGICA, NULO,
	
	// Operadores Miscelaneos
	TROCA, // OK

	// ERRO
	ERRO_LEXICO;

	static public TipoFicha doIdentificador (String identificador) {
		if (identificador.compareTo("se") == 0)
			return SE;
		else if (identificador.compareTo("senao") == 0)
			return SENAO;
		else if (identificador.compareTo("escolha") == 0)
			return ESCOLHA;
		else if (identificador.compareTo("caso") == 0)
			return CASO;
		else if (identificador.compareTo("para") == 0)
			return PARA;
		else if (identificador.compareTo("enquanto") == 0)
			return ENQUANTO;
		else if (identificador.compareTo("faca") == 0)
			return FACA;
		else if (identificador.compareTo("inteiro") == 0)
			return INTEIRO;
		else if (identificador.compareTo("real") == 0)
			return REAL;
		else if (identificador.compareTo("logico") == 0)
			return LOGICO;
		else if (identificador.compareTo("text") == 0)
			return TEXTO;
		else if (identificador.compareTo("caracter") == 0)
			return CARACTER;
		else if (identificador.compareTo("retorne") == 0)
			return RETORNE;
		else if (identificador.compareTo("pare") == 0)
			return PARE;
		else if (identificador.compareTo("publico") == 0)
			return PUBLICO;
		else if (identificador.compareTo("privado") == 0)
			return PRIVADO;
		else if (identificador.compareTo("protegido") == 0)
			return PROTEGIDO;
		else if (identificador.compareTo("estatico") == 0)
			return ESTATICO;
		else if (identificador.compareTo("final") == 0)
			return FINAL;
		else if (identificador.compareTo("classe") == 0)
			return CLASSE;
        else if (identificador.compareTo("criar") == 0)
            return CRIAR;
		else if (identificador.compareTo("construtor") == 0)
			return CONSTRUTOR;
		else if (identificador.compareTo("implementa") == 0)
			return IMPLEMENTA;
		else if (identificador.compareTo("pai") == 0)
			return PAI;
		else if (identificador.compareTo("herda") == 0)
			return HERDA;
		else
			return IDENTIFICADOR;
	}
}
